/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ucb.ProjetoFinal.service;

import br.ucb.ProjetoFinal.domain.LoteRemessa;
import br.ucb.ProjetoFinal.domain.Prefeitura;
import br.ucb.ProjetoFinal.util.CrudService;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author DCBorges
 */
@Stateless
public class PrefeituraService {

    @EJB
    private CrudService crudService;

    //Prefeitura
    public void insertPrefeitura(Prefeitura prefeitura) {
        this.crudService.create(prefeitura);
    }

    public void updatePrefeitura(Prefeitura prefeitura) {
        this.crudService.update(prefeitura);
    }

    public void deletePrefeitura(long id) {
        this.crudService.delete(Prefeitura.class, id);
    }

    public Prefeitura getPrefeitura(long id) {
        return this.crudService.find(Prefeitura.class, id);
    }

    public List<Prefeitura> getPrefeituras() {
        return this.crudService.findAll(Prefeitura.class);
    }
    //LoteRemessa

    public void insertLoteRemessa(LoteRemessa loteRemessa) {
        this.crudService.create(loteRemessa);
    }

    public void updateLoteRemessa(LoteRemessa loteRemessa) {
        this.crudService.update(loteRemessa);
    }

    public void deleteLoteRemessa(long id) {
        this.crudService.delete(LoteRemessa.class, id);
    }

    public LoteRemessa getLoteRemessa(long id) {
        return this.crudService.find(LoteRemessa.class, id);
    }

    public List<LoteRemessa> getLoteRemessas() {
        return this.crudService.findAll(LoteRemessa.class);
    }

    public List<Prefeitura> getPrefeituras(Integer cnpj, String uf) {
        Map<String, Object> args = new HashMap<String, Object>();
        StringBuilder query = new StringBuilder("select p from Prefeitura p where 1=1");
        if(cnpj != null) {
            query.append(" and p.nuCnpjPref = :pCnpj");
            args.put("pCnpj", cnpj);
        }
        if(uf != null){
            query.append(" and p.sgUf.sgUf = :pUf");
            args.put("pUf", uf);
        }
        return crudService.findWithCustomQuery(query.toString(), args);
    }
    
    public List<Prefeitura> detailPrefeitura(Long nuCnpjPref){
        Map<String, Object> args = new HashMap<String, Object>();
        args.put("pNuCnpjPref", nuCnpjPref);
        return crudService.findWithNamedQuery("Prefeitura.findByNuCnpjPref", args);
    }
    
       public List<LoteRemessa> detailLoteRemessa(Long nuCnpjPref){
        Map<String, Object> args = new HashMap<String, Object>();
        args.put("pNuCnpjPref", nuCnpjPref);
        return crudService.findWithNamedQuery("LoteRemessa.findByNuCnpjPref", args);
    }
}
